Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


Displaying Raw • Download


Radio.hpp HEAD (a42f8d32) Text, 25.70 KB

T8b949e// Copyright (c) Sandeep Mistry. All rights reserved.
T8b949e// Licensed under the MIT license.

T8b949e// Modifications and additions copyright 2024 by Mark Qvist & Jacob Eva
T8b949e// Obviously still under the MIT license.

Tff7b72#Tff7b72ifndef RADIO_H
Tff7b72#Tff7b72define RADIO_H

Tff7b72#Tff7b72include T8b949e<Arduino.h>
Tff7b72#Tff7b72include T8b949e<SPI.h>
Tff7b72#Tff7b72include T8b949e"Interfaces.h"
Tff7b72#Tff7b72include T8b949e"Boards.h"
Tff7b72#Tff7b72include T8b949e"src/misc/FIFOBuffer.h"

Tff7b72#Tff7b72define MAX_PKT_LENGTH 255

T8b949e// TX
Tff7b72#Tff7b72define PA_OUTPUT_RFO_PIN 0
Tff7b72#Tff7b72define PA_OUTPUT_PA_BOOST_PIN 1

T8b949e// Default LoRa settings
Tff7b72#Tff7b72define PHY_HEADER_LORA_SYMBOLS 20
Tff7b72#Tff7b72define PHY_CRC_LORA_BITS 16
Tff7b72#Tff7b72define LORA_PREAMBLE_SYMBOLS_MIN 18
Tff7b72#Tff7b72define LORA_PREAMBLE_TARGET_MS 24
Tff7b72#Tff7b72define LORA_PREAMBLE_FAST_DELTA 18
Tff7b72#Tff7b72define LORA_FAST_THRESHOLD_BPS 30E3
Tff7b72#Tff7b72define LORA_LIMIT_THRESHOLD_BPS 60E3

T8b949e// DCD
Tff7b72#Tff7b72define STATUS_INTERVAL_MS 3
Tff7b72#Tff7b72define DCD_SAMPLES 2500
Tff7b72#Tff7b72define UTIL_UPDATE_INTERVAL_MS 1000
Tff7b72#Tff7b72define UTIL_UPDATE_INTERVAL (UTIL_UPDATE_INTERVAL_MSTff7b72/Tff7b72STATUS_INTERVAL_MS)
Tff7b72#Tff7b72define AIRTIME_LONGTERM 3600
Tff7b72#Tff7b72define AIRTIME_LONGTERM_MS (AIRTIME_LONGTERM*1000)
Tff7b72#Tff7b72define AIRTIME_BINLEN_MS (STATUS_INTERVAL_MS*DCD_SAMPLES)
Tff7b72#Tff7b72define AIRTIME_BINS ((AIRTIME_LONGTERM*1000)Tff7b72/Tff7b72AIRTIME_BINLEN_MS)
Tff7b72#Tff7b72define current_airtime_bin(void) (millis()%AIRTIME_LONGTERM_MS)Tff7b72/Tff7b72AIRTIME_BINLEN_MS


T8b949e// CSMA Parameters
Tff7b72#Tff7b72define CSMA_SIFS_MS 0
Tff7b72#Tff7b72define CSMA_POST_TX_YIELD_SLOTS 3
Tff7b72#Tff7b72define CSMA_SLOT_MAX_MS 100
Tff7b72#Tff7b72define CSMA_SLOT_MIN_MS 24
Tff7b72#Tff7b72define CSMA_SLOT_MIN_FAST_DELTA 18
Tff7b72#Tff7b72define CSMA_SLOT_SYMBOLS 12
Tff7b72#Tff7b72define CSMA_CW_BANDS 4
Tff7b72#Tff7b72define CSMA_CW_MIN 0
Tff7b72#Tff7b72define CSMA_CW_PER_BAND_WINDOWS 15
Tff7b72#Tff7b72define CSMA_BAND_1_MAX_AIRTIME 7
Tff7b72#Tff7b72define CSMA_BAND_N_MIN_AIRTIME 85
Tff7b72#Tff7b72define CSMA_INFR_THRESHOLD_DB 12

Tff7b72#Tff7b72define LED_ID_TRIG 16

Tff7b72#Tff7b72define NOISE_FLOOR_SAMPLES 64

Tff7b72#Tff7b72define RSSI_OFFSET 157

Tff7b72#Tff7b72define PHY_HEADER_LORA_SYMBOLS 8

Tff7b72#Tff7b72define MODEM_TIMEOUT_MULT 1.5

T8b949e// Status flags
Tff7b72const Tffa657uint8_t Te6edf3SIG_DETECT Tff7b72= T79c0ff0x01Tb4b4b4;
Tff7b72const Tffa657uint8_t Te6edf3SIG_SYNCED Tff7b72= T79c0ff0x02Tb4b4b4;
Tff7b72const Tffa657uint8_t Te6edf3RX_ONGOING Tff7b72= T79c0ff0x04Tb4b4b4;

T8b949e// forward declare Utilities.h LED functions
Tffa657void Td2a8ffled_rx_onTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffled_rx_offTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffled_id_onTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffled_id_offTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffled_indicate_airtime_lockTb4b4b4(Tb4b4b4)Tb4b4b4;

Tffa657void Td2a8ffkiss_indicate_channel_statsTb4b4b4(Tffa657uint8_t Te6edf3indexTb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffkiss_indicate_csma_statsTb4b4b4(Tffa657uint8_t Te6edf3indexTb4b4b4)Tb4b4b4;

Tff7b72#Tff7b72if PLATFORM == PLATFORM_ESP32
T8b949e// get update_lock for ESP32
Tff7b72extern Te6edf3portMUX_TYPE Te6edf3update_lockTb4b4b4;
Tff7b72#Tff7b72endif

Tff7b72class T56d364RadioInterface Tff7b72: Tff7b72public Te6edf3Stream Tb4b4b4{
Tff7b72publicTff7b72:
T8b949e// todo: in the future define _spiModem and _spiSettings from here for inheritence by child classes
Te6edf3RadioInterfaceTb4b4b4(Tffa657uint8_t Te6edf3indexTb4b4b4) Tff7b72: Te6edf3_indexTb4b4b4(Te6edf3indexTb4b4b4)Tb4b4b4, Te6edf3_sfTb4b4b4(T79c0ff0x07Tb4b4b4)Tb4b4b4, Te6edf3_radio_lockedTb4b4b4(Tffa657falseTb4b4b4)Tb4b4b4,
Te6edf3_radio_onlineTb4b4b4(Tffa657falseTb4b4b4)Tb4b4b4, Te6edf3_st_airtime_limitTb4b4b4(T79c0ff0.0Tb4b4b4)Tb4b4b4, Te6edf3_lt_airtime_limitTb4b4b4(T79c0ff0.0Tb4b4b4)Tb4b4b4,
Te6edf3_airtime_lockTb4b4b4(Tffa657falseTb4b4b4)Tb4b4b4, Te6edf3_airtimeTb4b4b4(T79c0ff0.0Tb4b4b4)Tb4b4b4, Te6edf3_longterm_airtimeTb4b4b4(T79c0ff0.0Tb4b4b4)Tb4b4b4, Te6edf3_last_packet_costTb4b4b4(T79c0ff0.0Tb4b4b4)Tb4b4b4,
Te6edf3_local_channel_utilTb4b4b4(T79c0ff0.0Tb4b4b4)Tb4b4b4, Te6edf3_total_channel_utilTb4b4b4(T79c0ff0.0Tb4b4b4)Tb4b4b4,
Te6edf3_longterm_channel_utilTb4b4b4(T79c0ff0.0Tb4b4b4)Tb4b4b4, Te6edf3_last_status_updateTb4b4b4(T79c0ff0Tb4b4b4)Tb4b4b4,
Te6edf3_stat_signal_detectedTb4b4b4(Tffa657falseTb4b4b4)Tb4b4b4, Te6edf3_stat_signal_syncedTb4b4b4(Tffa657falseTb4b4b4)Tb4b4b4,Te6edf3_stat_rx_ongoingTb4b4b4(Tffa657falseTb4b4b4)Tb4b4b4, Te6edf3_last_dcdTb4b4b4(T79c0ff0Tb4b4b4)Tb4b4b4,
Te6edf3_dcd_countTb4b4b4(T79c0ff0Tb4b4b4)Tb4b4b4, Te6edf3_dcdTb4b4b4(Tffa657falseTb4b4b4)Tb4b4b4, Te6edf3_dcd_ledTb4b4b4(Tffa657falseTb4b4b4)Tb4b4b4,
Te6edf3_dcd_waitingTb4b4b4(Tffa657falseTb4b4b4)Tb4b4b4, Te6edf3_dcd_sampleTb4b4b4(T79c0ff0Tb4b4b4)Tb4b4b4,
Te6edf3_csma_slot_msTb4b4b4(Te6edf3CSMA_SLOT_MIN_MSTb4b4b4)Tb4b4b4,
Te6edf3_preambleLengthTb4b4b4(Te6edf3LORA_PREAMBLE_SYMBOLS_MINTb4b4b4)Tb4b4b4, Te6edf3_lora_symbol_time_msTb4b4b4(T79c0ff0.0Tb4b4b4)Tb4b4b4,
Te6edf3_lora_preamble_time_msTb4b4b4(T79c0ff0Tb4b4b4)Tb4b4b4, Te6edf3_lora_header_time_msTb4b4b4(T79c0ff0Tb4b4b4)Tb4b4b4, Te6edf3_lora_symbol_rateTb4b4b4(T79c0ff0.0Tb4b4b4)Tb4b4b4, Te6edf3_lora_us_per_byteTb4b4b4(T79c0ff0.0Tb4b4b4)Tb4b4b4, Te6edf3_bitrateTb4b4b4(T79c0ff0Tb4b4b4)Tb4b4b4,
Te6edf3_packetTb4b4b4{T79c0ff0Tb4b4b4}Tb4b4b4, Te6edf3_onReceiveTb4b4b4(Tffa657NULLTb4b4b4)Tb4b4b4, Te6edf3_txpTb4b4b4(T79c0ff0Tb4b4b4)Tb4b4b4, Te6edf3_ldroTb4b4b4(Tffa657falseTb4b4b4)Tb4b4b4, Te6edf3_limit_rateTb4b4b4(Tffa657falseTb4b4b4)Tb4b4b4, Te6edf3_interference_detectedTb4b4b4(Tffa657falseTb4b4b4)Tb4b4b4, Te6edf3_avoid_interferenceTb4b4b4(Tffa657trueTb4b4b4)Tb4b4b4, Te6edf3_difs_msTb4b4b4(Te6edf3CSMA_SIFS_MS Tff7b72+ T79c0ff2 Tff7b72* Te6edf3_csma_slot_msTb4b4b4)Tb4b4b4, Te6edf3_difs_wait_startTb4b4b4(T79c0ff0Tb4b4b4)Tb4b4b4, Te6edf3_cw_wait_startTb4b4b4(T79c0ff0Tb4b4b4)Tb4b4b4, Te6edf3_cw_wait_targetTb4b4b4(T79c0ff0Tb4b4b4)Tb4b4b4, Te6edf3_cw_wait_passedTb4b4b4(T79c0ff0Tb4b4b4)Tb4b4b4, Te6edf3_csma_cwTb4b4b4(T79c0ff-1Tb4b4b4)Tb4b4b4, Te6edf3_cw_bandTb4b4b4(T79c0ff1Tb4b4b4)Tb4b4b4, Te6edf3_cw_minTb4b4b4(T79c0ff0Tb4b4b4)Tb4b4b4, Te6edf3_cw_maxTb4b4b4(Te6edf3CSMA_CW_PER_BAND_WINDOWSTb4b4b4)Tb4b4b4, Te6edf3_noise_floor_sampledTb4b4b4(Tffa657falseTb4b4b4)Tb4b4b4, Te6edf3_noise_floor_sampleTb4b4b4(T79c0ff0Tb4b4b4)Tb4b4b4, Te6edf3_noise_floor_bufferTb4b4b4(Tb4b4b4{T79c0ff0Tb4b4b4}Tb4b4b4)Tb4b4b4, Te6edf3_noise_floorTb4b4b4(T79c0ff-292Tb4b4b4)Tb4b4b4, Te6edf3_led_id_filterTb4b4b4(T79c0ff0Tb4b4b4)Tb4b4b4, Te6edf3_preamble_detected_atTb4b4b4(T79c0ff0Tb4b4b4) Tb4b4b4{Tb4b4b4}Tb4b4b4;

Tff7b72virtual Tffa657void Td2a8ffresetTb4b4b4(Tb4b4b4) Tff7b72= T79c0ff0Tb4b4b4;

Tff7b72virtual Tffa657int Td2a8ffbeginTb4b4b4(Tb4b4b4) Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72virtual Tffa657void Td2a8ffendTb4b4b4(Tb4b4b4) Tff7b72= T79c0ff0Tb4b4b4;

Tff7b72virtual Tffa657int Td2a8ffbeginPacketTb4b4b4(Tffa657int Te6edf3implicitHeader Tff7b72= Tffa657falseTb4b4b4) Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72virtual Tffa657int Td2a8ffendPacketTb4b4b4(Tb4b4b4) Tff7b72= T79c0ff0Tb4b4b4;

Tff7b72virtual Tffa657int Td2a8ffpacketRssiTb4b4b4(Tffa657uint8_t Te6edf3pkt_snr_raw Tff7b72= T79c0ff0xFFTb4b4b4) Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72virtual Tffa657int Td2a8ffcurrentRssiTb4b4b4(Tb4b4b4) Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72virtual Tffa657uint8_t Td2a8ffpacketRssiRawTb4b4b4(Tb4b4b4) Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72virtual Tffa657uint8_t Td2a8ffcurrentRssiRawTb4b4b4(Tb4b4b4) Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72virtual Tffa657uint8_t Td2a8ffpacketSnrRawTb4b4b4(Tb4b4b4) Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72virtual Tffa657float Td2a8ffpacketSnrTb4b4b4(Tb4b4b4) Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72virtual Tffa657long Td2a8ffpacketFrequencyErrorTb4b4b4(Tb4b4b4) Tff7b72= T79c0ff0Tb4b4b4;

T8b949e// from Print
Tff7b72virtual Tffa657size_t Td2a8ffwriteTb4b4b4(Tffa657uint8_t Te6edf3byteTb4b4b4) Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72virtual Tffa657size_t Td2a8ffwriteTb4b4b4(Tff7b72const Tffa657uint8_t Tff7b72*Te6edf3bufferTb4b4b4, Tffa657size_t Te6edf3sizeTb4b4b4) Tff7b72= T79c0ff0Tb4b4b4;

T8b949e// from Stream
Tff7b72virtual Tffa657int Td2a8ffavailableTb4b4b4(Tb4b4b4) Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72virtual Tffa657int Td2a8ffreadTb4b4b4(Tb4b4b4) Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72virtual Tffa657int Td2a8ffpeekTb4b4b4(Tb4b4b4) Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72virtual Tffa657void Td2a8ffflushTb4b4b4(Tb4b4b4) Tff7b72= T79c0ff0Tb4b4b4;

Tff7b72virtual Tffa657void Td2a8ffonReceiveTb4b4b4(Tffa657voidTb4b4b4(Tff7b72*Te6edf3callbackTb4b4b4)Tb4b4b4(Tffa657uint8_tTb4b4b4, Tffa657intTb4b4b4)Tb4b4b4) Tff7b72= T79c0ff0Tb4b4b4;

Tff7b72virtual Tffa657void Td2a8ffreceiveTb4b4b4(Tffa657int Te6edf3size Tff7b72= T79c0ff0Tb4b4b4) Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72virtual Tffa657void Td2a8ffstandbyTb4b4b4(Tb4b4b4) Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72virtual Tffa657void Td2a8ffsleepTb4b4b4(Tb4b4b4) Tff7b72= T79c0ff0Tb4b4b4;

Tff7b72virtual Tffa657bool Td2a8ffpreInitTb4b4b4(Tb4b4b4) Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72virtual Tffa657int8_t Td2a8ffgetTxPowerTb4b4b4(Tb4b4b4) Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72virtual Tffa657void Td2a8ffsetTxPowerTb4b4b4(Tffa657int Te6edf3levelTb4b4b4, Tffa657int Te6edf3outputPin Tff7b72= Te6edf3PA_OUTPUT_PA_BOOST_PINTb4b4b4) Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72virtual Tffa657uint32_t Td2a8ffgetFrequencyTb4b4b4(Tb4b4b4) Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72virtual Tffa657void Td2a8ffsetFrequencyTb4b4b4(Tffa657uint32_t Te6edf3frequencyTb4b4b4) Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72virtual Tffa657void Td2a8ffsetSpreadingFactorTb4b4b4(Tffa657int Te6edf3sfTb4b4b4) Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72virtual Tffa657uint8_t Td2a8ffgetSpreadingFactorTb4b4b4(Tb4b4b4) Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72virtual Tffa657uint32_t Td2a8ffgetSignalBandwidthTb4b4b4(Tb4b4b4) Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72virtual Tffa657void Td2a8ffsetSignalBandwidthTb4b4b4(Tffa657uint32_t Te6edf3sbwTb4b4b4) Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72virtual Tffa657void Td2a8ffsetCodingRate4Tb4b4b4(Tffa657int Te6edf3denominatorTb4b4b4) Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72virtual Tffa657uint8_t Td2a8ffgetCodingRate4Tb4b4b4(Tb4b4b4) Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72virtual Tffa657void Td2a8ffsetPreambleLengthTb4b4b4(Tffa657long Te6edf3lengthTb4b4b4) Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72virtual Tffa657bool Td2a8ffdcdTb4b4b4(Tb4b4b4) Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72virtual Tffa657void Td2a8ffenableCrcTb4b4b4(Tb4b4b4) Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72virtual Tffa657void Td2a8ffdisableCrcTb4b4b4(Tb4b4b4) Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72virtual Tffa657void Td2a8ffenableTCXOTb4b4b4(Tb4b4b4) Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72virtual Tffa657void Td2a8ffdisableTCXOTb4b4b4(Tb4b4b4) Tff7b72= T79c0ff0Tb4b4b4;

Tff7b72virtual Tffa657uint8_t Td2a8ffrandomTb4b4b4(Tb4b4b4) Tff7b72= T79c0ff0Tb4b4b4;

Tff7b72virtual Tffa657void Td2a8ffsetSPIFrequencyTb4b4b4(Tffa657uint32_t Te6edf3frequencyTb4b4b4) Tff7b72= T79c0ff0Tb4b4b4;

Tffa657void Td2a8ffupdateBitrateTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3_radio_onlineTb4b4b4) Tb4b4b4{ Te6edf3_bitrate Tff7b72= T79c0ff0Tb4b4b4; Tb4b4b4}
Tff7b72else Tb4b4b4{
Te6edf3_lora_symbol_rate Tff7b72= Tb4b4b4(Tffa657floatTb4b4b4)Te6edf3getSignalBandwidthTb4b4b4(Tb4b4b4)Tff7b72/Tb4b4b4(Tffa657floatTb4b4b4)Tb4b4b4(Te6edf3powTb4b4b4(T79c0ff2Tb4b4b4, Te6edf3_sfTb4b4b4)Tb4b4b4)Tb4b4b4;
Te6edf3_lora_symbol_time_ms Tff7b72= Tb4b4b4(T79c0ff1.0Tff7b72/Te6edf3_lora_symbol_rateTb4b4b4)Tff7b72*T79c0ff1000.0Tb4b4b4;
Te6edf3_bitrate Tff7b72= Tb4b4b4(Tffa657uint32_tTb4b4b4)Tb4b4b4(Te6edf3_sf Tff7b72* Tb4b4b4( Tb4b4b4(T79c0ff4.0Tff7b72/Tb4b4b4(Tffa657floatTb4b4b4)Te6edf3getCodingRate4Tb4b4b4(Tb4b4b4)Tb4b4b4) Tff7b72/ Tb4b4b4(Tb4b4b4(Tffa657floatTb4b4b4)Tb4b4b4(Te6edf3powTb4b4b4(T79c0ff2Tb4b4b4, Te6edf3_sfTb4b4b4)Tb4b4b4)Tff7b72/Tb4b4b4(Tb4b4b4(Tffa657floatTb4b4b4)Te6edf3getSignalBandwidthTb4b4b4(Tb4b4b4)Tff7b72/T79c0ff1000.0Tb4b4b4)Tb4b4b4) Tb4b4b4) Tff7b72* T79c0ff1000.0Tb4b4b4)Tb4b4b4;
Te6edf3_lora_us_per_byte Tff7b72= T79c0ff1000000.0Tff7b72/Tb4b4b4(Tb4b4b4(Tffa657floatTb4b4b4)Te6edf3_bitrateTff7b72/T79c0ff8.0Tb4b4b4)Tb4b4b4;
Tffa657bool Te6edf3fast_rate Tff7b72= Te6edf3_bitrate Tff7b72> Te6edf3LORA_FAST_THRESHOLD_BPSTb4b4b4;
Te6edf3_limit_rate Tff7b72= Te6edf3_bitrate Tff7b72> Te6edf3LORA_LIMIT_THRESHOLD_BPSTb4b4b4;

Tffa657int Te6edf3csma_slot_min_ms Tff7b72= Te6edf3CSMA_SLOT_MIN_MSTb4b4b4;
Tffa657float Te6edf3lora_preamble_target_ms Tff7b72= Te6edf3LORA_PREAMBLE_TARGET_MSTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3fast_rateTb4b4b4) Tb4b4b4{ Te6edf3csma_slot_min_ms Tff7b72-Tff7b72= Te6edf3CSMA_SLOT_MIN_FAST_DELTATb4b4b4;
Te6edf3lora_preamble_target_ms Tff7b72-Tff7b72= Te6edf3LORA_PREAMBLE_FAST_DELTATb4b4b4; Tb4b4b4}
Te6edf3_csma_slot_ms Tff7b72= Te6edf3_lora_symbol_time_msTff7b72*Te6edf3CSMA_SLOT_SYMBOLSTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3_csma_slot_ms Tff7b72> Te6edf3CSMA_SLOT_MAX_MSTb4b4b4) Tb4b4b4{ Te6edf3_csma_slot_ms Tff7b72= Te6edf3CSMA_SLOT_MAX_MSTb4b4b4; Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3_csma_slot_ms Tff7b72< Te6edf3CSMA_SLOT_MIN_MSTb4b4b4) Tb4b4b4{ Te6edf3_csma_slot_ms Tff7b72= Te6edf3csma_slot_min_msTb4b4b4; Tb4b4b4}
Te6edf3_difs_ms Tff7b72= Te6edf3CSMA_SIFS_MS Tff7b72+ T79c0ff2Tff7b72*Te6edf3_csma_slot_msTb4b4b4;
Tffa657float Te6edf3target_preamble_symbols Tff7b72= Te6edf3lora_preamble_target_msTff7b72/Te6edf3_lora_symbol_time_msTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3target_preamble_symbols Tff7b72< Te6edf3LORA_PREAMBLE_SYMBOLS_MINTb4b4b4) Tb4b4b4{ Te6edf3target_preamble_symbols Tff7b72= Te6edf3LORA_PREAMBLE_SYMBOLS_MINTb4b4b4; Tb4b4b4}
Tff7b72else Tb4b4b4{ Te6edf3target_preamble_symbols Tff7b72= Tb4b4b4(Te6edf3ceilTb4b4b4)Tb4b4b4(Te6edf3target_preamble_symbolsTb4b4b4)Tb4b4b4; Tb4b4b4}
Te6edf3setPreambleLengthTb4b4b4(Te6edf3target_preamble_symbolsTb4b4b4)Tb4b4b4;
Te6edf3_lora_preamble_time_ms Tff7b72= Tb4b4b4(Te6edf3ceilTb4b4b4)Tb4b4b4(Te6edf3_preambleLength Tff7b72* Te6edf3_lora_symbol_time_msTb4b4b4)Tb4b4b4;
Te6edf3_lora_header_time_ms Tff7b72= Tb4b4b4(Te6edf3ceilTb4b4b4)Tb4b4b4(Te6edf3PHY_HEADER_LORA_SYMBOLS Tff7b72* Te6edf3_lora_symbol_time_msTb4b4b4)Tb4b4b4;

Tb4b4b4}
Tb4b4b4}
Tff7b72virtual Tffa657void Td2a8ffhandleDio0RiseTb4b4b4(Tb4b4b4) Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72virtual Tffa657bool Td2a8ffgetPacketValidityTb4b4b4(Tb4b4b4) Tff7b72= T79c0ff0Tb4b4b4;
Tffa657uint32_t Td2a8ffgetBitrateTb4b4b4(Tb4b4b4) Tb4b4b4{ Tff7b72return Te6edf3_bitrateTb4b4b4; Tb4b4b4}Tb4b4b4;
Tffa657uint8_t Td2a8ffgetIndexTb4b4b4(Tb4b4b4) Tb4b4b4{ Tff7b72return Te6edf3_indexTb4b4b4; Tb4b4b4}Tb4b4b4;
Tffa657void Td2a8ffsetRadioLockTb4b4b4(Tffa657bool Te6edf3lockTb4b4b4) Tb4b4b4{ Te6edf3_radio_locked Tff7b72= Te6edf3lockTb4b4b4; Tb4b4b4}Tb4b4b4;
Tffa657bool Td2a8ffgetRadioLockTb4b4b4(Tb4b4b4) Tb4b4b4{ Tff7b72return Te6edf3_radio_lockedTb4b4b4; Tb4b4b4}Tb4b4b4;
Tffa657void Td2a8ffsetRadioOnlineTb4b4b4(Tffa657bool Te6edf3onlineTb4b4b4) Tb4b4b4{ Te6edf3_radio_online Tff7b72= Te6edf3onlineTb4b4b4; Tb4b4b4}Tb4b4b4;
Tffa657bool Td2a8ffgetRadioOnlineTb4b4b4(Tb4b4b4) Tb4b4b4{ Tff7b72return Te6edf3_radio_onlineTb4b4b4; Tb4b4b4}Tb4b4b4;
Tffa657void Td2a8ffsetSTALockTb4b4b4(Tffa657float Te6edf3atTb4b4b4) Tb4b4b4{ Te6edf3_st_airtime_limit Tff7b72= Te6edf3atTb4b4b4; Tb4b4b4}Tb4b4b4;
Tffa657float Td2a8ffgetSTALockTb4b4b4(Tb4b4b4) Tb4b4b4{ Tff7b72return Te6edf3_st_airtime_limitTb4b4b4; Tb4b4b4}Tb4b4b4;
Tffa657void Td2a8ffsetLTALockTb4b4b4(Tffa657float Te6edf3atTb4b4b4) Tb4b4b4{ Te6edf3_lt_airtime_limit Tff7b72= Te6edf3atTb4b4b4; Tb4b4b4}Tb4b4b4;
Tffa657float Td2a8ffgetLTALockTb4b4b4(Tb4b4b4) Tb4b4b4{ Tff7b72return Te6edf3_lt_airtime_limitTb4b4b4; Tb4b4b4}Tb4b4b4;
Tffa657bool Td2a8ffcalculateALockTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3_airtime_lock Tff7b72= Tffa657falseTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3_st_airtime_limit Tff7b72!Tff7b72= T79c0ff0.0 Tff7b72&Tff7b72& Te6edf3_airtime Tff7b72>Tff7b72= Te6edf3_st_airtime_limitTb4b4b4) Tb4b4b4{
Te6edf3_airtime_lock Tff7b72= Tffa657trueTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3_lt_airtime_limit Tff7b72!Tff7b72= T79c0ff0.0 Tff7b72&Tff7b72& Te6edf3_longterm_airtime Tff7b72>Tff7b72= Te6edf3_lt_airtime_limitTb4b4b4) Tb4b4b4{
Te6edf3_airtime_lock Tff7b72= Tffa657trueTb4b4b4;
Tb4b4b4}
Tff7b72return Te6edf3_airtime_lockTb4b4b4;
Tb4b4b4}Tb4b4b4;
Tffa657void Td2a8ffupdateAirtimeTb4b4b4(Tb4b4b4) Tb4b4b4{
Tffa657uint16_t Te6edf3cb Tff7b72= Te6edf3current_airtime_binTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657uint16_t Te6edf3pb Tff7b72= Te6edf3cbT79c0ff-1Tb4b4b4; Tff7b72if Tb4b4b4(Te6edf3cbT79c0ff-1 Tff7b72< T79c0ff0Tb4b4b4) Tb4b4b4{ Te6edf3pb Tff7b72= Te6edf3AIRTIME_BINST79c0ff-1Tb4b4b4; Tb4b4b4}
Tffa657uint16_t Te6edf3nb Tff7b72= Te6edf3cbTff7b72+T79c0ff1Tb4b4b4; Tff7b72if Tb4b4b4(Te6edf3nb Tff7b72=Tff7b72= Te6edf3AIRTIME_BINSTb4b4b4) Tb4b4b4{ Te6edf3nb Tff7b72= T79c0ff0Tb4b4b4; Tb4b4b4}
Te6edf3_airtime_binsTb4b4b4[Te6edf3nbTb4b4b4] Tff7b72= T79c0ff0Tb4b4b4;
Te6edf3_airtime Tff7b72= Tb4b4b4(Tffa657floatTb4b4b4)Tb4b4b4(Te6edf3_airtime_binsTb4b4b4[Te6edf3cbTb4b4b4]Tff7b72+Te6edf3_airtime_binsTb4b4b4[Te6edf3pbTb4b4b4]Tb4b4b4)Tff7b72/Tb4b4b4(T79c0ff2.0Tff7b72*Te6edf3AIRTIME_BINLEN_MSTb4b4b4)Tb4b4b4;
Tffa657uint32_t Te6edf3longterm_airtime_sum Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72for Tb4b4b4(Tffa657uint16_t Te6edf3bin Tff7b72= T79c0ff0Tb4b4b4; Te6edf3bin Tff7b72< Te6edf3AIRTIME_BINSTb4b4b4; Te6edf3binTff7b72+Tff7b72+Tb4b4b4) Tb4b4b4{
Te6edf3longterm_airtime_sum Tff7b72+Tff7b72= Te6edf3_airtime_binsTb4b4b4[Te6edf3binTb4b4b4]Tb4b4b4;
Tb4b4b4}
Te6edf3_longterm_airtime Tff7b72= Tb4b4b4(Tffa657floatTb4b4b4)Te6edf3longterm_airtime_sumTff7b72/Tb4b4b4(Tffa657floatTb4b4b4)Te6edf3AIRTIME_LONGTERM_MSTb4b4b4;
Tffa657float Te6edf3longterm_channel_util_sum Tff7b72= T79c0ff0.0Tb4b4b4;
Tff7b72for Tb4b4b4(Tffa657uint16_t Te6edf3bin Tff7b72= T79c0ff0Tb4b4b4; Te6edf3bin Tff7b72< Te6edf3AIRTIME_BINSTb4b4b4; Te6edf3binTff7b72+Tff7b72+Tb4b4b4) Tb4b4b4{
Te6edf3longterm_channel_util_sum Tff7b72+Tff7b72= Te6edf3_longterm_binsTb4b4b4[Te6edf3binTb4b4b4]Tb4b4b4;
Tb4b4b4}
Te6edf3_longterm_channel_util Tff7b72= Tb4b4b4(Tffa657floatTb4b4b4)Te6edf3longterm_channel_util_sumTff7b72/Tb4b4b4(Tffa657floatTb4b4b4)Te6edf3AIRTIME_BINSTb4b4b4;
Te6edf3updateCSMAParametersTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3kiss_indicate_channel_statsTb4b4b4(Te6edf3_indexTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4;
Tffa657float Td2a8ffgetAirtimeTb4b4b4(Tffa657uint16_t Te6edf3writtenTb4b4b4) Tb4b4b4{
Tffa657float Te6edf3lora_symbols Tff7b72= T79c0ff0Tb4b4b4;
Tffa657float Te6edf3packet_cost_ms Tff7b72= T79c0ff0.0Tb4b4b4;

Tff7b72if Tb4b4b4(Te6edf3interfacesTb4b4b4[Te6edf3_indexTb4b4b4] Tff7b72=Tff7b72= Te6edf3SX1276 Tff7b72|Tff7b72| Te6edf3interfacesTb4b4b4[Te6edf3_indexTb4b4b4] Tff7b72=Tff7b72= Te6edf3SX1278Tb4b4b4) Tb4b4b4{
Te6edf3lora_symbols Tff7b72+Tff7b72= Tb4b4b4(T79c0ff8Tff7b72*Te6edf3written Tff7b72+ Te6edf3PHY_CRC_LORA_BITS Tff7b72- T79c0ff4Tff7b72*Te6edf3_sf Tff7b72+ T79c0ff8 Tff7b72+ Te6edf3PHY_HEADER_LORA_SYMBOLSTb4b4b4)Tb4b4b4;
Te6edf3lora_symbols Tff7b72/Tff7b72= T79c0ff4Tff7b72*Tb4b4b4(Te6edf3_sfT79c0ff-2Tff7b72*Te6edf3_ldroTb4b4b4)Tb4b4b4;
Te6edf3lora_symbols Tff7b72*Tff7b72= Te6edf3getCodingRate4Tb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3lora_symbols Tff7b72+Tff7b72= Te6edf3_preambleLength Tff7b72+ T79c0ff0.25 Tff7b72+ T79c0ff8Tb4b4b4;
Te6edf3packet_cost_ms Tff7b72+Tff7b72= Te6edf3lora_symbols Tff7b72* Te6edf3_lora_symbol_time_msTb4b4b4;
Tb4b4b4}
Tff7b72else Tff7b72if Tb4b4b4(Te6edf3interfacesTb4b4b4[Te6edf3_indexTb4b4b4] Tff7b72=Tff7b72= Te6edf3SX1262 Tff7b72|Tff7b72| Te6edf3interfacesTb4b4b4[Te6edf3_indexTb4b4b4] Tff7b72=Tff7b72= Te6edf3SX1280Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3_sf Tff7b72< T79c0ff7Tb4b4b4) Tb4b4b4{
Te6edf3lora_symbols Tff7b72+Tff7b72= Tb4b4b4(T79c0ff8Tff7b72*Te6edf3written Tff7b72+ Te6edf3PHY_CRC_LORA_BITS Tff7b72- T79c0ff4Tff7b72*Te6edf3_sf Tff7b72+ Te6edf3PHY_HEADER_LORA_SYMBOLSTb4b4b4)Tb4b4b4;
Te6edf3lora_symbols Tff7b72/Tff7b72= T79c0ff4Tff7b72*Te6edf3_sfTb4b4b4;
Te6edf3lora_symbols Tff7b72*Tff7b72= Te6edf3getCodingRate4Tb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3lora_symbols Tff7b72+Tff7b72= Te6edf3_preambleLength Tff7b72+ T79c0ff2.25 Tff7b72+ T79c0ff8Tb4b4b4;
Te6edf3packet_cost_ms Tff7b72+Tff7b72= Te6edf3lora_symbols Tff7b72* Te6edf3_lora_symbol_time_msTb4b4b4;

Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3lora_symbols Tff7b72+Tff7b72= Tb4b4b4(T79c0ff8Tff7b72*Te6edf3written Tff7b72+ Te6edf3PHY_CRC_LORA_BITS Tff7b72- T79c0ff4Tff7b72*Te6edf3_sf Tff7b72+ T79c0ff8 Tff7b72+ Te6edf3PHY_HEADER_LORA_SYMBOLSTb4b4b4)Tb4b4b4;
Te6edf3lora_symbols Tff7b72/Tff7b72= T79c0ff4Tff7b72*Tb4b4b4(Te6edf3_sfT79c0ff-2Tff7b72*Te6edf3_ldroTb4b4b4)Tb4b4b4;
Te6edf3lora_symbols Tff7b72*Tff7b72= Te6edf3getCodingRate4Tb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3lora_symbols Tff7b72+Tff7b72= Te6edf3_preambleLength Tff7b72+ T79c0ff0.25 Tff7b72+ T79c0ff8Tb4b4b4;
Te6edf3packet_cost_ms Tff7b72+Tff7b72= Te6edf3lora_symbols Tff7b72* Te6edf3_lora_symbol_time_msTb4b4b4;
Tb4b4b4}
Tb4b4b4}
Te6edf3_last_packet_cost Tff7b72= Te6edf3packet_cost_msTb4b4b4;
Tff7b72return Te6edf3packet_cost_msTb4b4b4;
Tb4b4b4}
Tffa657void Td2a8ffaddAirtimeTb4b4b4(Tb4b4b4) Tb4b4b4{
Tffa657uint16_t Te6edf3cb Tff7b72= Te6edf3current_airtime_binTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657uint16_t Te6edf3nb Tff7b72= Te6edf3cbTff7b72+T79c0ff1Tb4b4b4; Tff7b72if Tb4b4b4(Te6edf3nb Tff7b72=Tff7b72= Te6edf3AIRTIME_BINSTb4b4b4) Tb4b4b4{ Te6edf3nb Tff7b72= T79c0ff0Tb4b4b4; Tb4b4b4}
Te6edf3_airtime_binsTb4b4b4[Te6edf3cbTb4b4b4] Tff7b72+Tff7b72= Te6edf3_last_packet_costTb4b4b4;
Te6edf3_airtime_binsTb4b4b4[Te6edf3nbTb4b4b4] Tff7b72= T79c0ff0Tb4b4b4;
Tb4b4b4}Tb4b4b4;
Tffa657void Td2a8ffupdateModemStatusTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72#Tff7b72if MCU_VARIANT == MCU_ESP32
Te6edf3portENTER_CRITICALTb4b4b4(Tff7b72&Te6edf3update_lockTb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72elif MCU_VARIANT == MCU_NRF52
Te6edf3portENTER_CRITICALTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72endif

Tffa657bool Te6edf3carrier_detected Tff7b72= Te6edf3dcdTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657int Te6edf3current_rssi Tff7b72= Te6edf3currentRssiTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3_last_status_update Tff7b72= Te6edf3millisTb4b4b4(Tb4b4b4)Tb4b4b4;

Tff7b72#Tff7b72if MCU_VARIANT == MCU_ESP32
Te6edf3portEXIT_CRITICALTb4b4b4(Tff7b72&Te6edf3update_lockTb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72elif MCU_VARIANT == MCU_NRF52
Te6edf3portEXIT_CRITICALTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72endif

Te6edf3_interference_detected Tff7b72= Tff7b72!Te6edf3carrier_detected Tff7b72&Tff7b72& Tb4b4b4(Te6edf3current_rssi Tff7b72> Tb4b4b4(Te6edf3_noise_floorTff7b72+Te6edf3CSMA_INFR_THRESHOLD_DBTb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3_interference_detectedTb4b4b4) Tb4b4b4{ Tff7b72if Tb4b4b4(Te6edf3_led_id_filter Tff7b72< Te6edf3LED_ID_TRIGTb4b4b4) Tb4b4b4{ Te6edf3_led_id_filter Tff7b72+Tff7b72= T79c0ff1Tb4b4b4; Tb4b4b4} Tb4b4b4}
Tff7b72else Tb4b4b4{ Tff7b72if Tb4b4b4(Te6edf3_led_id_filter Tff7b72> T79c0ff0Tb4b4b4) Tb4b4b4{Te6edf3_led_id_filter Tff7b72-Tff7b72= T79c0ff1Tb4b4b4; Tb4b4b4} Tb4b4b4}

Tff7b72if Tb4b4b4(Te6edf3carrier_detectedTb4b4b4) Tb4b4b4{ Te6edf3_dcd Tff7b72= Tffa657trueTb4b4b4; Tb4b4b4} Tff7b72else Tb4b4b4{ Te6edf3_dcd Tff7b72= Tffa657falseTb4b4b4; Tb4b4b4}

Te6edf3_dcd_led Tff7b72= Te6edf3_dcdTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3_dcd_ledTb4b4b4) Tb4b4b4{ Te6edf3led_rx_onTb4b4b4(Tb4b4b4)Tb4b4b4; Tb4b4b4}
Tff7b72else Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3_interference_detectedTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3_led_id_filter Tff7b72>Tff7b72= Te6edf3LED_ID_TRIG Tff7b72&Tff7b72& Te6edf3_noise_floor_sampledTb4b4b4) Tb4b4b4{ Te6edf3led_id_onTb4b4b4(Tb4b4b4)Tb4b4b4; Tb4b4b4}
Tb4b4b4} Tff7b72else Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3_airtime_lockTb4b4b4) Tb4b4b4{ Te6edf3led_indicate_airtime_lockTb4b4b4(Tb4b4b4)Tb4b4b4; Tb4b4b4}
Tff7b72else Tb4b4b4{ Te6edf3led_rx_offTb4b4b4(Tb4b4b4)Tb4b4b4; Te6edf3led_id_offTb4b4b4(Tb4b4b4)Tb4b4b4; Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tffa657void Td2a8ffupdateNoiseFloorTb4b4b4(Tb4b4b4) Tb4b4b4{
Tffa657int Te6edf3current_rssi Tff7b72= Te6edf3currentRssiTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3_dcdTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3_noise_floor_sampled Tff7b72|Tff7b72| Te6edf3current_rssi Tff7b72< Te6edf3_noise_floor Tff7b72+ Te6edf3CSMA_INFR_THRESHOLD_DBTb4b4b4) Tb4b4b4{
Te6edf3_noise_floor_bufferTb4b4b4[Te6edf3_noise_floor_sampleTb4b4b4] Tff7b72= Te6edf3current_rssiTb4b4b4;
Te6edf3_noise_floor_sample Tff7b72= Te6edf3_noise_floor_sampleTff7b72+T79c0ff1Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3_noise_floor_sample Tff7b72>Tff7b72= Te6edf3NOISE_FLOOR_SAMPLESTb4b4b4) Tb4b4b4{
Te6edf3_noise_floor_sample Tff7b72%Tff7b72= Te6edf3NOISE_FLOOR_SAMPLESTb4b4b4;
Te6edf3_noise_floor_sampled Tff7b72= Tffa657trueTb4b4b4;
Tb4b4b4}

Tff7b72if Tb4b4b4(Te6edf3_noise_floor_sampledTb4b4b4) Tb4b4b4{
Te6edf3_noise_floor Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72for Tb4b4b4(Tffa657int Te6edf3ni Tff7b72= T79c0ff0Tb4b4b4; Te6edf3ni Tff7b72< Te6edf3NOISE_FLOOR_SAMPLESTb4b4b4; Te6edf3niTff7b72+Tff7b72+Tb4b4b4) Tb4b4b4{ Te6edf3_noise_floor Tff7b72+Tff7b72= Te6edf3_noise_floor_bufferTb4b4b4[Te6edf3niTb4b4b4]Tb4b4b4; Tb4b4b4}
Te6edf3_noise_floor Tff7b72/Tff7b72= Te6edf3NOISE_FLOOR_SAMPLESTb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tffa657void Td2a8ffcheckModemStatusTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3millisTb4b4b4(Tb4b4b4)Tff7b72-Te6edf3_last_status_update Tff7b72>Tff7b72= Te6edf3STATUS_INTERVAL_MSTb4b4b4) Tb4b4b4{
Te6edf3updateModemStatusTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3updateNoiseFloorTb4b4b4(Tb4b4b4)Tb4b4b4;

Te6edf3_util_samplesTb4b4b4[Te6edf3_dcd_sampleTb4b4b4] Tff7b72= Te6edf3_dcdTb4b4b4;
Te6edf3_dcd_sample Tff7b72= Tb4b4b4(Te6edf3_dcd_sampleTff7b72+T79c0ff1Tb4b4b4)Tff7b72%Te6edf3DCD_SAMPLESTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3_dcd_sample Tff7b72% Te6edf3UTIL_UPDATE_INTERVAL Tff7b72=Tff7b72= T79c0ff0Tb4b4b4) Tb4b4b4{
Tffa657int Te6edf3util_count Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72for Tb4b4b4(Tffa657int Te6edf3ui Tff7b72= T79c0ff0Tb4b4b4; Te6edf3ui Tff7b72< Te6edf3DCD_SAMPLESTb4b4b4; Te6edf3uiTff7b72+Tff7b72+Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3_util_samplesTb4b4b4[Te6edf3uiTb4b4b4]Tb4b4b4) Te6edf3util_countTff7b72+Tff7b72+Tb4b4b4;
Tb4b4b4}
Te6edf3_local_channel_util Tff7b72= Tb4b4b4(Tffa657floatTb4b4b4)Te6edf3util_count Tff7b72/ Tb4b4b4(Tffa657floatTb4b4b4)Te6edf3DCD_SAMPLESTb4b4b4;
Te6edf3_total_channel_util Tff7b72= Te6edf3_local_channel_util Tff7b72+ Te6edf3_airtimeTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3_total_channel_util Tff7b72> T79c0ff1.0Tb4b4b4) Te6edf3_total_channel_util Tff7b72= T79c0ff1.0Tb4b4b4;

Tffa657int16_t Te6edf3cb Tff7b72= Te6edf3current_airtime_binTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657uint16_t Te6edf3nb Tff7b72= Te6edf3cbTff7b72+T79c0ff1Tb4b4b4; Tff7b72if Tb4b4b4(Te6edf3nb Tff7b72=Tff7b72= Te6edf3AIRTIME_BINSTb4b4b4) Tb4b4b4{ Te6edf3nb Tff7b72= T79c0ff0Tb4b4b4; Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3_total_channel_util Tff7b72> Te6edf3_longterm_binsTb4b4b4[Te6edf3cbTb4b4b4]Tb4b4b4) Te6edf3_longterm_binsTb4b4b4[Te6edf3cbTb4b4b4] Tff7b72= Te6edf3_total_channel_utilTb4b4b4;
Te6edf3_longterm_binsTb4b4b4[Te6edf3nbTb4b4b4] Tff7b72= T79c0ff0.0Tb4b4b4;

Te6edf3updateAirtimeTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}Tb4b4b4;
Tffa657void Td2a8ffupdateCSMAParametersTb4b4b4(Tb4b4b4) Tb4b4b4{
Tffa657int Te6edf3airtime_pct Tff7b72= Tb4b4b4(Tffa657intTb4b4b4)Tb4b4b4(Te6edf3_airtimeTff7b72*T79c0ff100Tb4b4b4)Tb4b4b4;
Tffa657int Te6edf3new_cw_band Tff7b72= Te6edf3_cw_bandTb4b4b4;

Tff7b72if Tb4b4b4(Te6edf3airtime_pct Tff7b72<Tff7b72= Te6edf3CSMA_BAND_1_MAX_AIRTIMETb4b4b4) Tb4b4b4{ Te6edf3new_cw_band Tff7b72= T79c0ff1Tb4b4b4; Tb4b4b4}
Tff7b72else Tb4b4b4{
Tffa657int Te6edf3at Tff7b72= Te6edf3airtime_pct Tff7b72+ Te6edf3CSMA_BAND_1_MAX_AIRTIMETb4b4b4;
Te6edf3new_cw_band Tff7b72= Te6edf3mapTb4b4b4(Te6edf3atTb4b4b4, Te6edf3CSMA_BAND_1_MAX_AIRTIMETb4b4b4, Te6edf3CSMA_BAND_N_MIN_AIRTIMETb4b4b4, T79c0ff2Tb4b4b4, Te6edf3CSMA_CW_BANDSTb4b4b4)Tb4b4b4;
Tb4b4b4}

Tff7b72if Tb4b4b4(Te6edf3new_cw_band Tff7b72> Te6edf3CSMA_CW_BANDSTb4b4b4) Tb4b4b4{ Te6edf3new_cw_band Tff7b72= Te6edf3CSMA_CW_BANDSTb4b4b4; Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3new_cw_band Tff7b72!Tff7b72= Te6edf3_cw_bandTb4b4b4) Tb4b4b4{
Te6edf3_cw_band Tff7b72= Tb4b4b4(Tffa657uint8_tTb4b4b4)Tb4b4b4(Te6edf3new_cw_bandTb4b4b4)Tb4b4b4;
Te6edf3_cw_min Tff7b72= Tb4b4b4(Te6edf3_cw_bandT79c0ff-1Tb4b4b4) Tff7b72* Te6edf3CSMA_CW_PER_BAND_WINDOWSTb4b4b4;
Te6edf3_cw_max Tff7b72= Tb4b4b4(Te6edf3_cw_bandTb4b4b4) Tff7b72* Te6edf3CSMA_CW_PER_BAND_WINDOWS Tff7b72- T79c0ff1Tb4b4b4;
Te6edf3kiss_indicate_csma_statsTb4b4b4(Te6edf3_indexTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tffa657void Td2a8ffsetDCDTb4b4b4(Tffa657bool Te6edf3dcdTb4b4b4) Tb4b4b4{ Te6edf3_dcd Tff7b72= Te6edf3dcdTb4b4b4; Tb4b4b4}Tb4b4b4;
Tffa657bool Td2a8ffgetDCDTb4b4b4(Tb4b4b4) Tb4b4b4{ Tff7b72return Te6edf3_dcdTb4b4b4; Tb4b4b4}Tb4b4b4;
Tffa657void Td2a8ffsetDCDWaitingTb4b4b4(Tffa657bool Te6edf3dcd_waitingTb4b4b4) Tb4b4b4{ Te6edf3_dcd_waiting Tff7b72= Te6edf3dcd_waitingTb4b4b4; Tb4b4b4}Tb4b4b4;
Tffa657bool Td2a8ffgetDCDWaitingTb4b4b4(Tb4b4b4) Tb4b4b4{ Tff7b72return Te6edf3_dcd_waitingTb4b4b4; Tb4b4b4}Tb4b4b4;
Tffa657float Td2a8ffgetAirtimeTb4b4b4(Tb4b4b4) Tb4b4b4{ Tff7b72return Te6edf3_airtimeTb4b4b4; Tb4b4b4}Tb4b4b4;
Tffa657float Td2a8ffgetLongtermAirtimeTb4b4b4(Tb4b4b4) Tb4b4b4{ Tff7b72return Te6edf3_longterm_airtimeTb4b4b4; Tb4b4b4}Tb4b4b4;
Tffa657float Td2a8ffgetTotalChannelUtilTb4b4b4(Tb4b4b4) Tb4b4b4{ Tff7b72return Te6edf3_total_channel_utilTb4b4b4; Tb4b4b4}Tb4b4b4;
Tffa657float Td2a8ffgetLongtermChannelUtilTb4b4b4(Tb4b4b4) Tb4b4b4{ Tff7b72return Te6edf3_longterm_channel_utilTb4b4b4; Tb4b4b4}Tb4b4b4;
Tffa657void Td2a8ffsetCSMASlotMSTb4b4b4(Tffa657int Te6edf3slot_sizeTb4b4b4) Tb4b4b4{ Te6edf3_csma_slot_ms Tff7b72= Te6edf3slot_sizeTb4b4b4; Tb4b4b4}Tb4b4b4;
Tffa657int Td2a8ffgetCSMASlotMSTb4b4b4(Tb4b4b4) Tb4b4b4{ Tff7b72return Te6edf3_csma_slot_msTb4b4b4; Tb4b4b4}Tb4b4b4;
Tffa657float Td2a8ffgetSymbolTimeTb4b4b4(Tb4b4b4) Tb4b4b4{ Tff7b72return Te6edf3_lora_symbol_time_msTb4b4b4; Tb4b4b4}Tb4b4b4;
Tffa657float Td2a8ffgetSymbolRateTb4b4b4(Tb4b4b4) Tb4b4b4{ Tff7b72return Te6edf3_lora_symbol_rateTb4b4b4; Tb4b4b4}Tb4b4b4;
Tffa657long Td2a8ffgetPreambleLengthTb4b4b4(Tb4b4b4) Tb4b4b4{ Tff7b72return Te6edf3_preambleLengthTb4b4b4; Tb4b4b4}Tb4b4b4;
Tffa657void Td2a8ffsetAvdInterferenceTb4b4b4(Tffa657bool Te6edf3cfgTb4b4b4) Tb4b4b4{ Te6edf3_avoid_interference Tff7b72= Te6edf3cfgTb4b4b4; Tb4b4b4}Tb4b4b4;
Tffa657bool Td2a8ffgetAvdInterferenceTb4b4b4(Tb4b4b4) Tb4b4b4{ Tff7b72return Te6edf3_avoid_interferenceTb4b4b4; Tb4b4b4}Tb4b4b4;
Tffa657bool Td2a8ffgetInterferenceTb4b4b4(Tb4b4b4) Tb4b4b4{ Tff7b72return Te6edf3_interference_detectedTb4b4b4; Tb4b4b4}Tb4b4b4;
Tffa657int Td2a8ffgetNoiseFloorTb4b4b4(Tb4b4b4) Tb4b4b4{ Tff7b72return Te6edf3_noise_floorTb4b4b4; Tb4b4b4}Tb4b4b4;
Tffa657unsigned Tffa657long Td2a8ffgetDifsMSTb4b4b4(Tb4b4b4) Tb4b4b4{ Tff7b72return Te6edf3_difs_msTb4b4b4; Tb4b4b4}Tb4b4b4;
Tffa657uint8_t Td2a8ffgetCWBandTb4b4b4(Tb4b4b4) Tb4b4b4{ Tff7b72return Te6edf3_cw_bandTb4b4b4; Tb4b4b4}Tb4b4b4;
Tffa657uint8_t Td2a8ffgetCWMinTb4b4b4(Tb4b4b4) Tb4b4b4{ Tff7b72return Te6edf3_cw_minTb4b4b4; Tb4b4b4}Tb4b4b4;
Tffa657uint8_t Td2a8ffgetCWMaxTb4b4b4(Tb4b4b4) Tb4b4b4{ Tff7b72return Te6edf3_cw_maxTb4b4b4; Tb4b4b4}Tb4b4b4;
Tffa657uint8_t Td2a8ffgetCWTb4b4b4(Tb4b4b4) Tb4b4b4{ Tff7b72return Te6edf3_csma_cwTb4b4b4; Tb4b4b4}Tb4b4b4;
Tffa657void Td2a8ffsetCWTb4b4b4(Tffa657uint8_t Te6edf3cwTb4b4b4) Tb4b4b4{ Te6edf3_csma_cw Tff7b72= Te6edf3cwTb4b4b4; Tb4b4b4}Tb4b4b4;
Tffa657void Td2a8ffsetCWWaitTargetTb4b4b4(Tffa657unsigned Tffa657long Te6edf3targetTb4b4b4) Tb4b4b4{ Te6edf3_cw_wait_target Tff7b72= Te6edf3targetTb4b4b4; Tb4b4b4}Tb4b4b4;
Tffa657unsigned Tffa657long Td2a8ffgetCWWaitTargetTb4b4b4(Tb4b4b4) Tb4b4b4{ Tff7b72return Te6edf3_cw_wait_targetTb4b4b4; Tb4b4b4}Tb4b4b4;
Tffa657unsigned Tffa657long Td2a8ffgetDifsWaitStartTb4b4b4(Tb4b4b4) Tb4b4b4{ Tff7b72return Te6edf3_difs_wait_startTb4b4b4; Tb4b4b4}Tb4b4b4;
Tffa657void Td2a8ffsetDifsWaitStartTb4b4b4(Tffa657unsigned Tffa657long Te6edf3startTb4b4b4) Tb4b4b4{ Te6edf3_difs_wait_start Tff7b72= Te6edf3startTb4b4b4; Tb4b4b4}Tb4b4b4;
Tffa657unsigned Tffa657long Td2a8ffgetCWWaitStartTb4b4b4(Tb4b4b4) Tb4b4b4{ Tff7b72return Te6edf3_cw_wait_startTb4b4b4; Tb4b4b4}Tb4b4b4;
Tffa657void Td2a8ffsetCWWaitStartTb4b4b4(Tffa657unsigned Tffa657long Te6edf3startTb4b4b4) Tb4b4b4{ Te6edf3_cw_wait_start Tff7b72= Te6edf3startTb4b4b4; Tb4b4b4}Tb4b4b4;
Tffa657void Td2a8ffaddCWWaitPassedTb4b4b4(Tffa657unsigned Tffa657long Te6edf3startTb4b4b4) Tb4b4b4{ Te6edf3_cw_wait_passed Tff7b72+Tff7b72= Te6edf3startTb4b4b4; Tb4b4b4}Tb4b4b4;
Tffa657void Td2a8ffresetCWWaitPassedTb4b4b4(Tb4b4b4) Tb4b4b4{ Te6edf3_cw_wait_passed Tff7b72= T79c0ff0Tb4b4b4; Tb4b4b4}Tb4b4b4;
Tffa657bool Td2a8ffgetCWWaitStatusTb4b4b4(Tb4b4b4) Tb4b4b4{ Tff7b72return Te6edf3_cw_wait_passed Tff7b72< Te6edf3_cw_wait_targetTb4b4b4; Tb4b4b4}Tb4b4b4;
Tffa657bool Td2a8ffgetLimitRateTb4b4b4(Tb4b4b4) Tb4b4b4{ Tff7b72return Te6edf3_limit_rateTb4b4b4; Tb4b4b4}Tb4b4b4;
Tff7b72protectedTff7b72:
Tff7b72virtual Tffa657void Te6edf3explicitHeaderModeTb4b4b4(Tb4b4b4) Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72virtual Tffa657void Td2a8ffimplicitHeaderModeTb4b4b4(Tb4b4b4) Tff7b72= T79c0ff0Tb4b4b4;

Tffa657uint8_t Te6edf3_indexTb4b4b4;
Tffa657uint32_t Te6edf3_bitrateTb4b4b4;
Tffa657int8_t Te6edf3_txpTb4b4b4;
Tffa657uint8_t Te6edf3_sfTb4b4b4;
Tffa657bool Te6edf3_radio_lockedTb4b4b4;
Tffa657bool Te6edf3_radio_onlineTb4b4b4;
Tffa657float Te6edf3_st_airtime_limitTb4b4b4;
Tffa657float Te6edf3_lt_airtime_limitTb4b4b4;
Tffa657bool Te6edf3_airtime_lockTb4b4b4;
Tffa657uint16_t Te6edf3_airtime_binsTb4b4b4[Te6edf3AIRTIME_BINSTb4b4b4] Tff7b72= Tb4b4b4{T79c0ff0Tb4b4b4}Tb4b4b4;
Tffa657uint16_t Te6edf3_longterm_binsTb4b4b4[Te6edf3AIRTIME_BINSTb4b4b4] Tff7b72= Tb4b4b4{T79c0ff0Tb4b4b4}Tb4b4b4;
Tffa657float Te6edf3_airtimeTb4b4b4;
Tffa657float Te6edf3_longterm_airtimeTb4b4b4;
Tffa657float Te6edf3_last_packet_costTb4b4b4;
Tffa657float Te6edf3_local_channel_utilTb4b4b4;
Tffa657float Te6edf3_total_channel_utilTb4b4b4;
Tffa657float Te6edf3_longterm_channel_utilTb4b4b4;
Tffa657uint32_t Te6edf3_last_status_updateTb4b4b4;
Tffa657bool Te6edf3_stat_signal_detectedTb4b4b4;
Tffa657bool Te6edf3_stat_signal_syncedTb4b4b4;
Tffa657bool Te6edf3_stat_rx_ongoingTb4b4b4;
Tffa657uint32_t Te6edf3_last_dcdTb4b4b4;
Tffa657uint16_t Te6edf3_dcd_countTb4b4b4;
Tffa657bool Te6edf3_dcdTb4b4b4;
Tffa657bool Te6edf3_dcd_ledTb4b4b4;
Tffa657bool Te6edf3_dcd_waitingTb4b4b4;
Tffa657bool Te6edf3_util_samplesTb4b4b4[Te6edf3DCD_SAMPLESTb4b4b4] Tff7b72= Tb4b4b4{Tffa657falseTb4b4b4}Tb4b4b4;
Tffa657int Te6edf3_dcd_sampleTb4b4b4;
Tffa657long Te6edf3_preambleLengthTb4b4b4;
Tffa657float Te6edf3_lora_symbol_time_msTb4b4b4;
Tffa657float Te6edf3_lora_symbol_rateTb4b4b4;
Tffa657float Te6edf3_lora_us_per_byteTb4b4b4;
Tffa657long Te6edf3_lora_preamble_time_msTb4b4b4;
Tffa657long Te6edf3_lora_header_time_msTb4b4b4;
Tffa657bool Te6edf3_ldroTb4b4b4;
Tffa657bool Te6edf3_limit_rateTb4b4b4;
Tffa657bool Te6edf3_interference_detectedTb4b4b4;
Tffa657bool Te6edf3_avoid_interferenceTb4b4b4;
Tffa657int Te6edf3_csma_slot_msTb4b4b4;
Tffa657unsigned Tffa657long Te6edf3_difs_msTb4b4b4;
Tffa657unsigned Tffa657long Te6edf3_difs_wait_startTb4b4b4;
Tffa657unsigned Tffa657long Te6edf3_cw_wait_startTb4b4b4;
Tffa657unsigned Tffa657long Te6edf3_cw_wait_targetTb4b4b4;
Tffa657unsigned Tffa657long Te6edf3_cw_wait_passedTb4b4b4;
Tffa657int Te6edf3_csma_cwTb4b4b4;
Tffa657uint8_t Te6edf3_cw_bandTb4b4b4;
Tffa657uint8_t Te6edf3_cw_minTb4b4b4;
Tffa657uint8_t Te6edf3_cw_maxTb4b4b4;
Tffa657bool Te6edf3_noise_floor_sampledTb4b4b4;
Tffa657int Te6edf3_noise_floor_sampleTb4b4b4;
Tffa657int Te6edf3_noise_floor_bufferTb4b4b4[Te6edf3NOISE_FLOOR_SAMPLESTb4b4b4]Tb4b4b4;
Tffa657int Te6edf3_noise_floorTb4b4b4;
Tffa657uint8_t Te6edf3_led_id_filterTb4b4b4;
Tffa657unsigned Tffa657long Te6edf3_preamble_detected_atTb4b4b4;

Tffa657uint8_t Te6edf3_packetTb4b4b4[T79c0ff255Tb4b4b4]Tb4b4b4;
Tffa657void Tb4b4b4(Tff7b72*Te6edf3_onReceiveTb4b4b4)Tb4b4b4(Tffa657uint8_tTb4b4b4, Tffa657intTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4;

Tff7b72class T56d364sx126x Tff7b72: Tff7b72public Te6edf3RadioInterface Tb4b4b4{
Tff7b72publicTff7b72:
Te6edf3sx126xTb4b4b4(Tffa657uint8_t Te6edf3indexTb4b4b4, Te6edf3SPIClassTff7b72* Te6edf3spiTb4b4b4, Tffa657bool Te6edf3tcxoTb4b4b4, Tffa657bool Te6edf3dio2_as_rf_switchTb4b4b4, Tffa657int Te6edf3ssTb4b4b4, Tffa657int Te6edf3sclkTb4b4b4, Tffa657int Te6edf3mosiTb4b4b4, Tffa657int Te6edf3misoTb4b4b4, Tffa657int Te6edf3resetTb4b4b4, Tffa657int
Te6edf3dio0Tb4b4b4, Tffa657int Te6edf3busyTb4b4b4, Tffa657int Te6edf3rxenTb4b4b4)Tb4b4b4;

Tffa657void Td2a8ffresetTb4b4b4(Tb4b4b4)Tb4b4b4;

Tffa657int Td2a8ffbeginTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffendTb4b4b4(Tb4b4b4)Tb4b4b4;

Tffa657int Td2a8ffbeginPacketTb4b4b4(Tffa657int Te6edf3implicitHeader Tff7b72= Tffa657falseTb4b4b4)Tb4b4b4;
Tffa657int Td2a8ffendPacketTb4b4b4(Tb4b4b4)Tb4b4b4;

Tffa657int Td2a8ffpacketRssiTb4b4b4(Tffa657uint8_t Te6edf3pkt_snr_raw Tff7b72= T79c0ff0xFFTb4b4b4)Tb4b4b4;
Tffa657int Td2a8ffcurrentRssiTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657uint8_t Td2a8ffpacketRssiRawTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657uint8_t Td2a8ffcurrentRssiRawTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657uint8_t Td2a8ffpacketSnrRawTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657float Td2a8ffpacketSnrTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657long Td2a8ffpacketFrequencyErrorTb4b4b4(Tb4b4b4)Tb4b4b4;

T8b949e// from Print
Tffa657size_t Td2a8ffwriteTb4b4b4(Tffa657uint8_t Te6edf3byteTb4b4b4)Tb4b4b4;
Tffa657size_t Td2a8ffwriteTb4b4b4(Tff7b72const Tffa657uint8_t Tff7b72*Te6edf3bufferTb4b4b4, Tffa657size_t Te6edf3sizeTb4b4b4)Tb4b4b4;

T8b949e// from Stream
Tffa657int Td2a8ffavailableTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657int Td2a8ffreadTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657int Td2a8ffpeekTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffflushTb4b4b4(Tb4b4b4)Tb4b4b4;

Tffa657void Td2a8ffonReceiveTb4b4b4(Tffa657voidTb4b4b4(Tff7b72*Te6edf3callbackTb4b4b4)Tb4b4b4(Tffa657uint8_tTb4b4b4, Tffa657intTb4b4b4)Tb4b4b4)Tb4b4b4;

Tffa657void Td2a8ffreceiveTb4b4b4(Tffa657int Te6edf3size Tff7b72= T79c0ff0Tb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffstandbyTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffsleepTb4b4b4(Tb4b4b4)Tb4b4b4;

Tffa657bool Td2a8ffpreInitTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657int8_t Td2a8ffgetTxPowerTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffsetTxPowerTb4b4b4(Tffa657int Te6edf3levelTb4b4b4, Tffa657int Te6edf3outputPin Tff7b72= Te6edf3PA_OUTPUT_PA_BOOST_PINTb4b4b4)Tb4b4b4;
Tffa657uint32_t Td2a8ffgetFrequencyTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffsetFrequencyTb4b4b4(Tffa657uint32_t Te6edf3frequencyTb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffsetSpreadingFactorTb4b4b4(Tffa657int Te6edf3sfTb4b4b4)Tb4b4b4;
Tffa657uint8_t Td2a8ffgetSpreadingFactorTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657uint32_t Td2a8ffgetSignalBandwidthTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffsetSignalBandwidthTb4b4b4(Tffa657uint32_t Te6edf3sbwTb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffsetCodingRate4Tb4b4b4(Tffa657int Te6edf3denominatorTb4b4b4)Tb4b4b4;
Tffa657uint8_t Td2a8ffgetCodingRate4Tb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffsetPreambleLengthTb4b4b4(Tffa657long Te6edf3lengthTb4b4b4)Tb4b4b4;
Tffa657bool Td2a8ffdcdTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffenableCrcTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffdisableCrcTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffenableTCXOTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffdisableTCXOTb4b4b4(Tb4b4b4)Tb4b4b4;


Te6edf3byte Td2a8ffrandomTb4b4b4(Tb4b4b4)Tb4b4b4;

Tffa657void Td2a8ffsetSPIFrequencyTb4b4b4(Tffa657uint32_t Te6edf3frequencyTb4b4b4)Tb4b4b4;

Tffa657void Td2a8ffdumpRegistersTb4b4b4(Te6edf3StreamTff7b72& Te6edf3outTb4b4b4)Tb4b4b4;

Tffa657void Td2a8ffhandleDio0RiseTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72privateTff7b72:
Tffa657void Te6edf3writeBufferTb4b4b4(Tff7b72const Tffa657uint8_tTff7b72* Te6edf3bufferTb4b4b4, Tffa657size_t Te6edf3sizeTb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffreadBufferTb4b4b4(Tffa657uint8_tTff7b72* Te6edf3bufferTb4b4b4, Tffa657size_t Te6edf3sizeTb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffloraModeTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffrxAntEnableTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffsetPacketParamsTb4b4b4(Tffa657uint32_t Te6edf3preambleTb4b4b4, Tffa657uint8_t Te6edf3headermodeTb4b4b4, Tffa657uint8_t Te6edf3lengthTb4b4b4, Tffa657uint8_t Te6edf3crcTb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffsetModulationParamsTb4b4b4(Tffa657uint8_t Te6edf3sfTb4b4b4, Tffa657uint8_t Te6edf3bwTb4b4b4, Tffa657uint8_t Te6edf3crTb4b4b4, Tffa657int Te6edf3ldroTb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffsetSyncWordTb4b4b4(Tffa657uint16_t Te6edf3swTb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffwaitOnBusyTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffexecuteOpcodeTb4b4b4(Tffa657uint8_t Te6edf3opcodeTb4b4b4, Tffa657uint8_t Tff7b72*Te6edf3bufferTb4b4b4, Tffa657uint8_t Te6edf3sizeTb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffexecuteOpcodeReadTb4b4b4(Tffa657uint8_t Te6edf3opcodeTb4b4b4, Tffa657uint8_t Tff7b72*Te6edf3bufferTb4b4b4, Tffa657uint8_t Te6edf3sizeTb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffexplicitHeaderModeTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffimplicitHeaderModeTb4b4b4(Tb4b4b4)Tb4b4b4;


Tffa657uint8_t Td2a8ffreadRegisterTb4b4b4(Tffa657uint16_t Te6edf3addressTb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffwriteRegisterTb4b4b4(Tffa657uint16_t Te6edf3addressTb4b4b4, Tffa657uint8_t Te6edf3valueTb4b4b4)Tb4b4b4;
Tffa657uint8_t Td2a8ffsingleTransferTb4b4b4(Tffa657uint8_t Te6edf3opcodeTb4b4b4, Tffa657uint16_t Te6edf3addressTb4b4b4, Tffa657uint8_t Te6edf3valueTb4b4b4)Tb4b4b4;

Tff7b72static Tffa657void Td2a8ffonDio0RiseTb4b4b4(Tb4b4b4)Tb4b4b4;

Tffa657void Td2a8ffhandleLowDataRateTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffoptimizeModemSensitivityTb4b4b4(Tb4b4b4)Tb4b4b4;

Tffa657void Td2a8ffcalibrateTb4b4b4(Tffa657voidTb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffcalibrate_imageTb4b4b4(Tffa657uint32_t Te6edf3frequencyTb4b4b4)Tb4b4b4;
Tffa657bool Td2a8ffgetPacketValidityTb4b4b4(Tb4b4b4)Tb4b4b4;

Tff7b72privateTff7b72:
Te6edf3SPISettings Te6edf3_spiSettingsTb4b4b4;
Te6edf3SPIClassTff7b72* Te6edf3_spiModemTb4b4b4;
Tffa657int Te6edf3_ssTb4b4b4;
Tffa657int Te6edf3_sclkTb4b4b4;
Tffa657int Te6edf3_mosiTb4b4b4;
Tffa657int Te6edf3_misoTb4b4b4;
Tffa657int Te6edf3_resetTb4b4b4;
Tffa657int Te6edf3_dio0Tb4b4b4;
Tffa657int Te6edf3_rxenTb4b4b4;
Tffa657int Te6edf3_busyTb4b4b4;
Tffa657uint32_t Te6edf3_frequencyTb4b4b4;
Tffa657uint8_t Te6edf3_bwTb4b4b4;
Tffa657uint8_t Te6edf3_crTb4b4b4;
Tffa657int Te6edf3_packetIndexTb4b4b4;
Tffa657int Te6edf3_implicitHeaderModeTb4b4b4;
Tffa657int Te6edf3_payloadLengthTb4b4b4;
Tffa657int Te6edf3_crcModeTb4b4b4;
Tffa657int Te6edf3_fifo_tx_addr_ptrTb4b4b4;
Tffa657int Te6edf3_fifo_rx_addr_ptrTb4b4b4;
Tffa657bool Te6edf3_preinit_doneTb4b4b4;
Tffa657bool Te6edf3_tcxoTb4b4b4;
Tffa657bool Te6edf3_dio2_as_rf_switchTb4b4b4;
Tb4b4b4}Tb4b4b4;

Tff7b72class T56d364sx127x Tff7b72: Tff7b72public Te6edf3RadioInterface Tb4b4b4{
Tff7b72publicTff7b72:
Te6edf3sx127xTb4b4b4(Tffa657uint8_t Te6edf3indexTb4b4b4, Te6edf3SPIClassTff7b72* Te6edf3spiTb4b4b4, Tffa657int Te6edf3ssTb4b4b4, Tffa657int Te6edf3sclkTb4b4b4, Tffa657int Te6edf3mosiTb4b4b4, Tffa657int Te6edf3misoTb4b4b4, Tffa657int Te6edf3resetTb4b4b4, Tffa657int Te6edf3dio0Tb4b4b4, Tffa657int Te6edf3busyTb4b4b4)Tb4b4b4;

Tffa657void Td2a8ffresetTb4b4b4(Tb4b4b4)Tb4b4b4;

Tffa657int Td2a8ffbeginTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffendTb4b4b4(Tb4b4b4)Tb4b4b4;

Tffa657int Td2a8ffbeginPacketTb4b4b4(Tffa657int Te6edf3implicitHeader Tff7b72= Tffa657falseTb4b4b4)Tb4b4b4;
Tffa657int Td2a8ffendPacketTb4b4b4(Tb4b4b4)Tb4b4b4;

Tffa657int Td2a8ffpacketRssiTb4b4b4(Tffa657uint8_t Te6edf3pkt_snr_raw Tff7b72= T79c0ff0xFFTb4b4b4)Tb4b4b4;
Tffa657int Td2a8ffpacketRssiTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657int Td2a8ffcurrentRssiTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657uint8_t Td2a8ffpacketRssiRawTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657uint8_t Td2a8ffcurrentRssiRawTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657uint8_t Td2a8ffpacketSnrRawTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657float Td2a8ffpacketSnrTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657long Td2a8ffpacketFrequencyErrorTb4b4b4(Tb4b4b4)Tb4b4b4;

T8b949e// from Print
Tffa657size_t Td2a8ffwriteTb4b4b4(Tffa657uint8_t Te6edf3byteTb4b4b4)Tb4b4b4;
Tffa657size_t Td2a8ffwriteTb4b4b4(Tff7b72const Tffa657uint8_t Tff7b72*Te6edf3bufferTb4b4b4, Tffa657size_t Te6edf3sizeTb4b4b4)Tb4b4b4;

T8b949e// from Stream
Tffa657int Td2a8ffavailableTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657int Td2a8ffreadTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657int Td2a8ffpeekTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffflushTb4b4b4(Tb4b4b4)Tb4b4b4;

Tffa657void Td2a8ffonReceiveTb4b4b4(Tffa657voidTb4b4b4(Tff7b72*Te6edf3callbackTb4b4b4)Tb4b4b4(Tffa657uint8_tTb4b4b4, Tffa657intTb4b4b4)Tb4b4b4)Tb4b4b4;

Tffa657void Td2a8ffreceiveTb4b4b4(Tffa657int Te6edf3size Tff7b72= T79c0ff0Tb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffstandbyTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffsleepTb4b4b4(Tb4b4b4)Tb4b4b4;

Tffa657bool Td2a8ffpreInitTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657int8_t Td2a8ffgetTxPowerTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffsetTxPowerTb4b4b4(Tffa657int Te6edf3levelTb4b4b4, Tffa657int Te6edf3outputPin Tff7b72= Te6edf3PA_OUTPUT_PA_BOOST_PINTb4b4b4)Tb4b4b4;
Tffa657uint32_t Td2a8ffgetFrequencyTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffsetFrequencyTb4b4b4(Tffa657uint32_t Te6edf3frequencyTb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffsetSpreadingFactorTb4b4b4(Tffa657int Te6edf3sfTb4b4b4)Tb4b4b4;
Tffa657uint8_t Td2a8ffgetSpreadingFactorTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657uint32_t Td2a8ffgetSignalBandwidthTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffsetSignalBandwidthTb4b4b4(Tffa657uint32_t Te6edf3sbwTb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffsetCodingRate4Tb4b4b4(Tffa657int Te6edf3denominatorTb4b4b4)Tb4b4b4;
Tffa657uint8_t Td2a8ffgetCodingRate4Tb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffsetPreambleLengthTb4b4b4(Tffa657long Te6edf3lengthTb4b4b4)Tb4b4b4;
Tffa657bool Td2a8ffdcdTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffenableCrcTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffdisableCrcTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffenableTCXOTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffdisableTCXOTb4b4b4(Tb4b4b4)Tb4b4b4;

Te6edf3byte Td2a8ffrandomTb4b4b4(Tb4b4b4)Tb4b4b4;

Tffa657void Td2a8ffsetSPIFrequencyTb4b4b4(Tffa657uint32_t Te6edf3frequencyTb4b4b4)Tb4b4b4;

Tffa657void Td2a8ffhandleDio0RiseTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657bool Td2a8ffgetPacketValidityTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72privateTff7b72:
Tffa657void Te6edf3setSyncWordTb4b4b4(Tffa657uint8_t Te6edf3swTb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffexplicitHeaderModeTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffimplicitHeaderModeTb4b4b4(Tb4b4b4)Tb4b4b4;


Tffa657uint8_t Td2a8ffreadRegisterTb4b4b4(Tffa657uint8_t Te6edf3addressTb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffwriteRegisterTb4b4b4(Tffa657uint8_t Te6edf3addressTb4b4b4, Tffa657uint8_t Te6edf3valueTb4b4b4)Tb4b4b4;
Tffa657uint8_t Td2a8ffsingleTransferTb4b4b4(Tffa657uint8_t Te6edf3addressTb4b4b4, Tffa657uint8_t Te6edf3valueTb4b4b4)Tb4b4b4;

Tff7b72static Tffa657void Td2a8ffonDio0RiseTb4b4b4(Tb4b4b4)Tb4b4b4;

Tffa657void Td2a8ffhandleLowDataRateTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffoptimizeModemSensitivityTb4b4b4(Tb4b4b4)Tb4b4b4;

Tff7b72privateTff7b72:
Te6edf3SPISettings Te6edf3_spiSettingsTb4b4b4;
Te6edf3SPIClassTff7b72* Te6edf3_spiModemTb4b4b4;
Tffa657int Te6edf3_ssTb4b4b4;
Tffa657int Te6edf3_sclkTb4b4b4;
Tffa657int Te6edf3_mosiTb4b4b4;
Tffa657int Te6edf3_misoTb4b4b4;
Tffa657int Te6edf3_resetTb4b4b4;
Tffa657int Te6edf3_dio0Tb4b4b4;
Tffa657int Te6edf3_busyTb4b4b4;
Tffa657uint32_t Te6edf3_frequencyTb4b4b4;
Tffa657int Te6edf3_packetIndexTb4b4b4;
Tffa657int Te6edf3_implicitHeaderModeTb4b4b4;
Tffa657bool Te6edf3_preinit_doneTb4b4b4;
Tffa657uint8_t Te6edf3_crTb4b4b4;
Tffa657uint32_t Te6edf3_bwTb4b4b4;
Tb4b4b4}Tb4b4b4;

Tff7b72class T56d364sx128x Tff7b72: Tff7b72public Te6edf3RadioInterface Tb4b4b4{
Tff7b72publicTff7b72:
Te6edf3sx128xTb4b4b4(Tffa657uint8_t Te6edf3indexTb4b4b4, Te6edf3SPIClassTff7b72* Te6edf3spiTb4b4b4, Tffa657bool Te6edf3tcxoTb4b4b4, Tffa657int Te6edf3ssTb4b4b4, Tffa657int Te6edf3sclkTb4b4b4, Tffa657int Te6edf3mosiTb4b4b4, Tffa657int Te6edf3misoTb4b4b4, Tffa657int Te6edf3resetTb4b4b4, Tffa657int Te6edf3dio0Tb4b4b4, Tffa657int Te6edf3busyTb4b4b4, Tffa657int Te6edf3rxenTb4b4b4, Tffa657int Te6edf3txenTb4b4b4)Tb4b4b4;

Tffa657void Td2a8ffresetTb4b4b4(Tb4b4b4)Tb4b4b4;

Tffa657int Td2a8ffbeginTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffendTb4b4b4(Tb4b4b4)Tb4b4b4;

Tffa657int Td2a8ffbeginPacketTb4b4b4(Tffa657int Te6edf3implicitHeader Tff7b72= Tffa657falseTb4b4b4)Tb4b4b4;
Tffa657int Td2a8ffendPacketTb4b4b4(Tb4b4b4)Tb4b4b4;

Tffa657int Td2a8ffpacketRssiTb4b4b4(Tffa657uint8_t Te6edf3pkt_snr_raw Tff7b72= T79c0ff0xFFTb4b4b4)Tb4b4b4;
Tffa657int Td2a8ffcurrentRssiTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657uint8_t Td2a8ffpacketRssiRawTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657uint8_t Td2a8ffcurrentRssiRawTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657uint8_t Td2a8ffpacketSnrRawTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657float Td2a8ffpacketSnrTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657long Td2a8ffpacketFrequencyErrorTb4b4b4(Tb4b4b4)Tb4b4b4;

T8b949e// from Print
Tffa657size_t Td2a8ffwriteTb4b4b4(Tffa657uint8_t Te6edf3byteTb4b4b4)Tb4b4b4;
Tffa657size_t Td2a8ffwriteTb4b4b4(Tff7b72const Tffa657uint8_t Tff7b72*Te6edf3bufferTb4b4b4, Tffa657size_t Te6edf3sizeTb4b4b4)Tb4b4b4;

T8b949e// from Stream
Tffa657int Td2a8ffavailableTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657int Td2a8ffreadTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657int Td2a8ffpeekTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffflushTb4b4b4(Tb4b4b4)Tb4b4b4;

Tffa657void Td2a8ffonReceiveTb4b4b4(Tffa657voidTb4b4b4(Tff7b72*Te6edf3callbackTb4b4b4)Tb4b4b4(Tffa657uint8_tTb4b4b4, Tffa657intTb4b4b4)Tb4b4b4)Tb4b4b4;

Tffa657void Td2a8ffreceiveTb4b4b4(Tffa657int Te6edf3size Tff7b72= T79c0ff0Tb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffstandbyTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffsleepTb4b4b4(Tb4b4b4)Tb4b4b4;

Tffa657bool Td2a8ffpreInitTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657int8_t Td2a8ffgetTxPowerTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffsetTxPowerTb4b4b4(Tffa657int Te6edf3levelTb4b4b4, Tffa657int Te6edf3outputPin Tff7b72= Te6edf3PA_OUTPUT_PA_BOOST_PINTb4b4b4)Tb4b4b4;
Tffa657uint32_t Td2a8ffgetFrequencyTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffsetFrequencyTb4b4b4(Tffa657uint32_t Te6edf3frequencyTb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffsetSpreadingFactorTb4b4b4(Tffa657int Te6edf3sfTb4b4b4)Tb4b4b4;
Tffa657uint8_t Td2a8ffgetSpreadingFactorTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657uint32_t Td2a8ffgetSignalBandwidthTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffsetSignalBandwidthTb4b4b4(Tffa657uint32_t Te6edf3sbwTb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffsetCodingRate4Tb4b4b4(Tffa657int Te6edf3denominatorTb4b4b4)Tb4b4b4;
Tffa657uint8_t Td2a8ffgetCodingRate4Tb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffsetPreambleLengthTb4b4b4(Tffa657long Te6edf3lengthTb4b4b4)Tb4b4b4;
Tffa657bool Td2a8ffdcdTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffenableCrcTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffdisableCrcTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffenableTCXOTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffdisableTCXOTb4b4b4(Tb4b4b4)Tb4b4b4;

Te6edf3byte Td2a8ffrandomTb4b4b4(Tb4b4b4)Tb4b4b4;

Tffa657void Td2a8ffsetSPIFrequencyTb4b4b4(Tffa657uint32_t Te6edf3frequencyTb4b4b4)Tb4b4b4;

Tffa657void Td2a8ffdumpRegistersTb4b4b4(Te6edf3StreamTff7b72& Te6edf3outTb4b4b4)Tb4b4b4;

Tffa657void Td2a8ffhandleDio0RiseTb4b4b4(Tb4b4b4)Tb4b4b4;

Tffa657bool Td2a8ffgetPacketValidityTb4b4b4(Tb4b4b4)Tb4b4b4;

Tff7b72privateTff7b72:
Tffa657void Te6edf3writeBufferTb4b4b4(Tff7b72const Tffa657uint8_tTff7b72* Te6edf3bufferTb4b4b4, Tffa657size_t Te6edf3sizeTb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffreadBufferTb4b4b4(Tffa657uint8_tTff7b72* Te6edf3bufferTb4b4b4, Tffa657size_t Te6edf3sizeTb4b4b4)Tb4b4b4;
Tffa657void Td2a8fftxAntEnableTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffrxAntEnableTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffloraModeTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffwaitOnBusyTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffexecuteOpcodeTb4b4b4(Tffa657uint8_t Te6edf3opcodeTb4b4b4, Tffa657uint8_t Tff7b72*Te6edf3bufferTb4b4b4, Tffa657uint8_t Te6edf3sizeTb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffexecuteOpcodeReadTb4b4b4(Tffa657uint8_t Te6edf3opcodeTb4b4b4, Tffa657uint8_t Tff7b72*Te6edf3bufferTb4b4b4, Tffa657uint8_t Te6edf3sizeTb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffsetPacketParamsTb4b4b4(Tffa657uint32_t Te6edf3preambleTb4b4b4, Tffa657uint8_t Te6edf3headermodeTb4b4b4, Tffa657uint8_t Te6edf3lengthTb4b4b4, Tffa657uint8_t Te6edf3crcTb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffsetModulationParamsTb4b4b4(Tffa657uint8_t Te6edf3sfTb4b4b4, Tffa657uint8_t Te6edf3bwTb4b4b4, Tffa657uint8_t Te6edf3crTb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffsetSyncWordTb4b4b4(Tffa657int Te6edf3swTb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffexplicitHeaderModeTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffimplicitHeaderModeTb4b4b4(Tb4b4b4)Tb4b4b4;


Tffa657uint8_t Td2a8ffreadRegisterTb4b4b4(Tffa657uint16_t Te6edf3addressTb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffwriteRegisterTb4b4b4(Tffa657uint16_t Te6edf3addressTb4b4b4, Tffa657uint8_t Te6edf3valueTb4b4b4)Tb4b4b4;
Tffa657uint8_t Td2a8ffsingleTransferTb4b4b4(Tffa657uint8_t Te6edf3opcodeTb4b4b4, Tffa657uint16_t Te6edf3addressTb4b4b4, Tffa657uint8_t Te6edf3valueTb4b4b4)Tb4b4b4;

Tff7b72static Tffa657void Td2a8ffonDio0RiseTb4b4b4(Tb4b4b4)Tb4b4b4;

Tffa657void Td2a8ffhandleLowDataRateTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffoptimizeModemSensitivityTb4b4b4(Tb4b4b4)Tb4b4b4;

Tff7b72privateTff7b72:
Te6edf3SPISettings Te6edf3_spiSettingsTb4b4b4;
Te6edf3SPIClassTff7b72* Te6edf3_spiModemTb4b4b4;
Tffa657int Te6edf3_ssTb4b4b4;
Tffa657int Te6edf3_sclkTb4b4b4;
Tffa657int Te6edf3_mosiTb4b4b4;
Tffa657int Te6edf3_misoTb4b4b4;
Tffa657int Te6edf3_resetTb4b4b4;
Tffa657int Te6edf3_dio0Tb4b4b4;
Tffa657int Te6edf3_rxenTb4b4b4;
Tffa657int Te6edf3_txenTb4b4b4;
Tffa657int Te6edf3_busyTb4b4b4;
Tffa657int Te6edf3_modemTb4b4b4;
Tffa657uint32_t Te6edf3_frequencyTb4b4b4;
Tffa657uint8_t Te6edf3_bwTb4b4b4;
Tffa657uint8_t Te6edf3_crTb4b4b4;
Tffa657int Te6edf3_packetIndexTb4b4b4;
Tffa657int Te6edf3_implicitHeaderModeTb4b4b4;
Tffa657int Te6edf3_payloadLengthTb4b4b4;
Tffa657int Te6edf3_crcModeTb4b4b4;
Tffa657int Te6edf3_fifo_tx_addr_ptrTb4b4b4;
Tffa657int Te6edf3_fifo_rx_addr_ptrTb4b4b4;
Tffa657bool Te6edf3_preinit_doneTb4b4b4;
Tffa657int Te6edf3_rxPacketLengthTb4b4b4;
Tffa657bool Te6edf3_tcxoTb4b4b4;
Tffa657uint8_t Te6edf3_preamble_eTb4b4b4;
Tffa657uint8_t Te6edf3_preamble_mTb4b4b4;
Tffa657uint32_t Te6edf3_last_preambleTb4b4b4;
Tb4b4b4}Tb4b4b4;
Tff7b72#Tff7b72endif


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────